package config

import (
	"github.com/spf13/viper"
	"log"
	"time"
)

type Config struct {
	App struct {
		Name string
		Port string
	}
	Database struct {
		Dsn          string
		MaxIdleConns int
		MaxOpenConns int
	}
	Jwt struct {
		Prefix string
		Secret string
		Exp    time.Duration
	}
	Redis struct {
		Address  string
		Database int
		Password string
	}
}

var AppConfig *Config //创建全局的AppConfig，确保其他地方可以访问

func InitConfig() {

	//使用viper将要读取的文件进行绑定 Name Path Type
	viper.SetConfigName("config")
	viper.SetConfigType("yml")
	viper.AddConfigPath("./config") //这里不需要加上文件后缀

	//错误处理  如果读取失败报错
	if err := viper.ReadInConfig(); err != nil {
		log.Fatalf("Error reading config file: %v", err)
	}

	AppConfig = &Config{} //将全局AppConfig变量创建实例

	//Unmarshal函数作用是将目标文件内容与Struct结构体进行映射保存
	//即将yml内容保存在AppConfig中 可以理解成javabean
	if err := viper.Unmarshal(AppConfig); err != nil {
		log.Fatal(err)
	}

	initDB()
	initRedis()
}
